#pragma once
#include <sstream>

template <typename T>
class Vector3
{
public:
	Vector3<T>(T x,T y,T z);
	//Vector3<T>(const Vector3<T> &other);
	Vector3<T>();
	virtual ~Vector3();

	T x;
	T y;
	T z;

	//Vector3& operator=(const Vector3 &other);
	Vector3& operator+=(const Vector3 &other);
	Vector3& operator-=(const Vector3 &other);
	Vector3& operator/=(const Vector3 &other);
	Vector3& operator*=(const Vector3 &other);

	Vector3& operator+(const Vector3 &other);
	Vector3& operator-(const Vector3 &other);
	Vector3& operator/(const Vector3 &other);
	Vector3& operator*(const Vector3 &other);

	Vector3& operator+=(const T &other);
	Vector3& operator-=(const T &other);
	Vector3& operator/=(const T &other);
	Vector3& operator*=(const T &other);

	Vector3& operator+(const T &other);
	Vector3& operator-(const T &other);
	Vector3& operator/(const T &other);
	Vector3& operator*(const T &other);

	bool operator==(const Vector3 &other);
	bool operator!=(const Vector3 &other);
	std::string print();
};

typedef Vector3<double> Vector3d;
typedef Vector3<double> Vector3d;
typedef Vector3<int> Vector3i;
